String.prototype.trim = function () {
    return this.replace(/^[\s\,]*/, "").replace(/[\s\,]*$/, ""); //for remove the space and comma at the begining/end of the tag.
};
    
function parseBlogContent(){
  var title_input = document.forms["addblog"]["title_input"];
  var tags = document.forms["addblog"]["tags"];
  tags.value = tags.value.trim();
  if(title_input.value==""){
     alert("Please input title of the item.");
     title_input.focus();
     return false;
  }
  if(tags.value.indexOf(" ")!=-1){
     alert("Please remove the space or replace it with '_' in the tags.");
     tags.focus();
     return false;
  }  
  if(document.getElementById("ccode").innerHTML == "Code"){
    document.getElementById("blogpostcode").value = getXHTML(document.getElementById("blogpostcode").value)
  }else{
    document.getElementById("blogpostcode").value = getXHTML(document.getElementById("blogpostview").innerHTML);
  }
};
function code(){
  document.getElementById("ccode").innerHTML = "Code";
  document.getElementById("cview").innerHTML = "<a href=\"javascript:void(view())\">View</a>";
  var content = document.getElementById("blogpostview").innerHTML;
  var xhtml = getXHTML(content);
  document.getElementById("blogpostcode").value = xhtml;
  document.getElementById("blogpostcode").style.display = "block";
  document.getElementById("blogpostview").style.display = "none";
  document.getElementById("edittool").style.display = "none";
  document.getElementById("blogpostview").focus();  
};
function view(){
  document.getElementById("ccode").innerHTML = "<a href=\"javascript:void(code())\">Code</a>";
  document.getElementById("cview").innerHTML = "View";
  var content = document.getElementById("blogpostcode").value;
  document.getElementById("blogpostview").innerHTML = content;
  document.getElementById("blogpostcode").style.display = "none";
  document.getElementById("blogpostview").style.display = "block";
  document.getElementById("edittool").style.display = "block";
  document.getElementById("blogpostview").focus();  
};

function initTool(){
 document.write('<div id="edittool" style="border:1px dotted;padding:5px 0;display:block"><div>') 
 document.write('<a href="javascript:rteAction(\'bold\')">B</a>---')
 document.write('<a href="javascript:rteAction(\'italic\')">I</a>---')
 document.write('<a href="javascript:rteAction(\'underline\')">U</a>---')
 document.write('<a href="javascript:rteAction(\'strikethrough\')">Stroke</a>---')
 document.write('<a href="javascript:rteAction(\'justifyleft\')">Left</a>---')
 document.write('<a href="javascript:rteAction(\'justifycenter\')">Center</a>---')
 document.write('<a href="javascript:rteAction(\'justifyright\')">Right</a>')
 document.write('</div><div>')
 document.write('<a href="javascript:rteInsertImage()">IMG</a>---')
 document.write('<a href="javascript:rteInsertLink()">Link</a>---')
 document.write('<a href="javascript:rteAction(\'Unlink\')">Unlink</a>---')
 document.write('<a href="javascript:rteBlockquote()">Block</a>&nbsp;')
 document.write('</div></div>')
}
function rteAction(param) {
   document.execCommand(param, false, null);   
};      
function rteInsertImage(){
  document.getElementById('popItem').innerHTML = '<iframe name="imgup" style="margin:0;padding:0;" frameborder="0" src="/static/html/insert_img.html"></iframe>'
  showDiv();
};
function rteGetImage(imurl){
  var str = '<img src="' + imurl + '" alt="img"/>';
  document.getElementById("blogpostview").focus();
  rteInsertHTML(str);
  document.getElementById("blogpostview").focus();
  closeDiv();
};
function rteBlockquote(){
  document.execCommand('formatblock',false,'<p>')
  document.execCommand('formatblock',false,'<blockquote>')
};
function rteInsertHTML(html) {
  if (document.all) {
    var oRng = document.selection.createRange(); 
    oRng.pasteHTML(html); 
    oRng.collapse(false); 
    oRng.select();
  }
  else {
    document.execCommand('insertHTML', false, html);
  }
};
  
function rteInsertLink(){
  document.getElementById('popItem').innerHTML = '<iframe name="imgup" style="margin:0;padding:0;" frameborder="0" src="/static/html/insert_link.html"></iframe>'
  showDiv();
}
function showDiv(){
  document.getElementById('popDiv').style.display='block';
  document.getElementById('bg').style.display='block';
};
function closeDiv(){
  document.getElementById('popDiv').style.display='none';
  document.getElementById('bg').style.display='none';
};
function getXHTML(data){return new Html2Xhtml(data).parse()};
function Html2Xhtml(data){this.data=data||''};
Html2Xhtml.prototype.parse = function() {
  var state = 0;
  var xhtml = '';
  var p = 0;
  var unget = false;
  var tagname = '';
  var attrname = '';
  var attrval = '';
  var quot = '';
  var data = this.data;
  var len = data.length;
  var phpval = '';
  var tagtype = 0;
  var insidepre = false;
  while (1) {
    if (p >= len && !unget) {
      return xhtml
    }
    if (unget) {
      unget = false
    } else {
      var c = data.substr(p++, 1)
    }
    switch (state) {
    case 0:
      if (c == '<') {
        state = 1;
        break
      }
      var cc = c.charCodeAt();
      if (Html2Xhtml.charEntities[cc]) {
        xhtml += '&' + Html2Xhtml.charEntities[cc] + ';'
      } else {
        xhtml += c
      }
      break;
    case 1:
      if (/[a-zA-Z]/.test(c)) {
        state = 2;
        tagtype = 1;
        tagname = c.toLowerCase();
        break
      }
      if (c == '/') {
        state = 2;
        tagtype = -1;
        break
      }
      if (c == '!') {
        if (data.substr(p, 2) == '--') {
          xhtml += '<!--';
          p += 2;
          state = 9;
          break
        }
        xhtml += '<!';
        state = 10;
        break
      }
      if (c == '?') {
        state = 11;
        xhtml += '<' + '?';
        break
      }
      xhtml += '&lt;';
      unget = true;
      state = 0;
      break;
    case 2:
      if (Html2Xhtml.isSpaceChar[c]) {
        xhtml += (!insidepre && tagtype > 0 && Html2Xhtml.hasNLBefore[tagname] && xhtml.length && xhtml.substr(xhtml.length - 1, 1) != '\n' ? '\n': '') + (tagtype > 0 ? '<': '</') + tagname;
        state = 3;
        break
      }
      if (c == '/') {
        xhtml += (!insidepre && tagtype > 0 && Html2Xhtml.hasNLBefore[tagname] && xhtml.length && xhtml.substr(xhtml.length - 1, 1) != '\n' ? '\n': '') + (tagtype > 0 ? '<': '</') + tagname;
        if (data.substr(p, 1) != '>') {
          state = 3;
          break
        }
        state = 4;
        break
      }
      if (c == '>') {
        xhtml += (!insidepre && tagtype > 0 && Html2Xhtml.hasNLBefore[tagname] && xhtml.length && xhtml.substr(xhtml.length - 1, 1) != '\n' ? '\n': '') + (tagtype > 0 ? '<': '</') + tagname;
        unget = true;
        state = 4;
        break
      }
      tagname += c.toLowerCase();
      break;
    case 3:
      if (Html2Xhtml.isSpaceChar[c]) {
        break
      }
      if (c == '/') {
        if (data.substr(p, 1) != '>') {
          break
        }
        state = 4;
        break
      }
      if (c == '>') {
        unget = true;
        state = 4;
        break
      }
      attrname = c.toLowerCase();
      attrval = '';
      state = 5;
      break;
    case 4:
      xhtml += (Html2Xhtml.isEmptyTag[tagname] ? ' />': '>') + (!insidepre && tagtype < 0 && Html2Xhtml.hasNLAfter[tagname] && p < len && data.substr(p, 1) != '\n' ? '\n': '');
      if (tagtype > 0 && Html2Xhtml.dontAnalyzeContent[tagname]) {
        state = 13;
        attrname = attrval = quot = '';
        tagtype = 0;
        break
      }
      if (tagname == 'pre') {
        insidepre = !insidepre
      }
      state = 0;
      tagname = attrname = attrval = quot = '';
      tagtype = 0;
      break;
    case 5:
      if (Html2Xhtml.isSpaceChar[c]) {
        xhtml += ' ' + attrname;
        if (Html2Xhtml.isEmptyAttr[attrname]) {
          xhtml += '="' + attrname + '"'
        }
        state = 3;
        break
      }
      if (c == '/') {
        xhtml += ' ' + attrname;
        if (Html2Xhtml.isEmptyAttr[attrname]) {
          xhtml += '="' + attrname + '"'
        }
        if (data.substr(p, 1) != '>') {
          state = 3;
          break
        }
        state = 4;
        break
      }
      if (c == '>') {
        xhtml += ' ' + attrname;
        if (Html2Xhtml.isEmptyAttr[attrname]) {
          xhtml += '="' + attrname + '"'
        }
        unget = true;
        state = 4;
        break
      }
      if (c == '=') {
        xhtml += ' ' + attrname + '=';
        state = 6;
        break
      }
      if (c == '"' || c == "'") {
        attrname += '?'
      } else {
        attrname += c.toLowerCase()
      }
      break;
    case 6:
      if (Html2Xhtml.isSpaceChar[c]) {
        xhtml += (Html2Xhtml.isEmptyAttr[attrname] ? '"' + attrname + '"': '""');
        state = 3;
        break
      }
      if (c == '>') {
        xhtml += (Html2Xhtml.isEmptyAttr[attrname] ? '"' + attrname + '"': '""');
        unget = true;
        state = 4;
        break
      }
      if (c == '/' && data.substr(p, 1) == '>') {
        xhtml += (Html2Xhtml.isEmptyAttr[attrname] ? '"' + attrname + '"': '""');
        state = 4;
        break
      }
      if (c == '"' || c == "'") {
        quot = c;
        state = 8;
        break
      }
      attrval = c;
      state = 7;
      break;
    case 7:
      if (Html2Xhtml.isSpaceChar[c]) {
        xhtml += '"' + Html2Xhtml.escapeQuot(attrval, '"') + '"';
        state = 3;
        break
      }
      if (c == '/' && data.substr(p, 1) == '>') {
        xhtml += '"' + Html2Xhtml.escapeQuot(attrval, '"') + '"';
        state = 4;
        break
      }
      if (c == '>') {
        unget = true;
        xhtml += '"' + Html2Xhtml.escapeQuot(attrval, '"') + '"';
        state = 4;
        break
      }
      attrval += c;
      break;
    case 8:
      if (c == quot) {
        xhtml += '"' + Html2Xhtml.escapeQuot(attrval, '"') + '"';
        state = 3;
        break
      }
      attrval += c;
      break;
    case 9:
      if (c == '-' && data.substr(p, 2) == '->') {
        p += 2;
        xhtml += '-->';
        state = 0;
        break
      }
      xhtml += c;
      break;
    case 10:
      if (c == '>') {
        state = 0
      }
      xhtml += c;
      break;
    case 11:
      if (c == "'" || c == '"') {
        quot = c;
        state = 12;
        break
      }
      if (c == '?' && data.substr(p, 1) == '>') {
        state = 0;
        xhtml += '?' + '>';
        p++;
        break
      }
      xhtml += c;
      break;
    case 12:
      if (c == quot) {
        state = 11;
        xhtml += quot + Html2Xhtml.escapeQuot(phpval, quot) + quot;
        phpval = quot = '';
        break
      }
      phpval += c;
      break;
    case 13:
      if (c == '<' && data.substr(p, tagname.length + 1).toLowerCase() == '/' + tagname) {
        unget = true;
        state = 0;
        tagname = '';
        break
      }
      if (tagname == 'textarea') {
        xhtml += Html2Xhtml.escapeHTMLChar(c)
      } else {
        xhtml += c
      }
      break
    }
  }
  return xhtml
};

Html2Xhtml.prototype.setHTML=function(data){this.data=data||this.data};

Html2Xhtml.escapeQuot = function(str, quot) {
  if (!quot) {
    quot = '"'
  }
  if (quot == '"') {
    return str.replace(/"/ig, '\\"')
  }
  return str.replace(/'/ig, "\\'")
};
Html2Xhtml.escapeHTMLChar = function(c) {
  if (c == '&') {
    return '&amp;'
  }
  if (c == '<') {
    return '&lt;'
  }
  if (c == '>') {
    return '&gt;'
  }
  var cc = c.charCodeAt();
  if (Html2Xhtml.charEntities[cc]) {
    return '&' + Html2Xhtml.charEntities[cc] + ';'
  } else {
    return c
  }
};
Html2Xhtml.isSpaceChar = {
  ' ': 1,
  '\r': 1,
  '\n': 1,
  '\t': 1
};
Html2Xhtml.isEmptyTag = {
  'area': 1,
  'base': 1,
  'basefont': 1,
  'br': 1,
  'hr': 1,
  'img': 1,
  'input': 1,
  'link': 1,
  'meta': 1,
  'param': 1
};
Html2Xhtml.isEmptyAttr = {
  'checked': 1,
  'compact': 1,
  'declare': 1,
  'defer': 1,
  'disabled': 1,
  'ismap': 1,
  'multiple': 1,
  'noresize': 1,
  'nosave': 1,
  'noshade': 1,
  'nowrap': 1,
  'readonly': 1,
  'selected': 1
};
Html2Xhtml.hasNLBefore = {
  'div': 1,
  'p': 1,
  'table': 1,
  'tbody': 1,
  'tr': 1,
  'td': 1,
  'th': 1,
  'title': 1,
  'head': 1,
  'body': 1,
  'script': 1,
  'comment': 1,
  'li': 1,
  'meta': 1,
  'h1': 1,
  'h2': 1,
  'h3': 1,
  'h4': 1,
  'h5': 1,
  'h6': 1,
  'hr': 1,
  'ul': 1,
  'ol': 1,
  'option': 1,
  'link': 1
};
Html2Xhtml.hasNLAfter = {
  'html': 1,
  'head': 1,
  'body': 1,
  'p': 1,
  'th': 1,
  'style': 1
};
Html2Xhtml.dontAnalyzeContent = {
  'textarea': 1,
  'script': 1,
  'style': 1
};
Html2Xhtml.charEntities = {
  160 : 'nbsp',
  161 : 'iexcl',
  162 : 'cent',
  163 : 'pound',
  164 : 'curren',
  165 : 'yen',
  166 : 'brvbar',
  167 : 'sect',
  168 : 'uml',
  169 : 'copy',
  170 : 'ordf',
  171 : 'laquo',
  172 : 'not',
  173 : 'shy',
  174 : 'reg',
  175 : 'macr',
  176 : 'deg',
  177 : 'plusmn',
  178 : 'sup2',
  179 : 'sup3',
  180 : 'acute',
  181 : 'micro',
  182 : 'para',
  183 : 'middot',
  184 : 'cedil',
  185 : 'sup1',
  186 : 'ordm',
  187 : 'raquo',
  188 : 'frac14',
  189 : 'frac12',
  190 : 'frac34',
  191 : 'iquest',
  192 : 'agrave',
  193 : 'aacute',
  194 : 'acirc',
  195 : 'atilde',
  196 : 'auml',
  197 : 'aring',
  198 : 'aelig',
  199 : 'ccedil',
  200 : 'egrave',
  201 : 'eacute',
  202 : 'ecirc',
  203 : 'euml',
  204 : 'igrave',
  205 : 'iacute',
  206 : 'icirc',
  207 : 'iuml',
  208 : 'eth',
  209 : 'ntilde',
  210 : 'ograve',
  211 : 'oacute',
  212 : 'ocirc',
  213 : 'otilde',
  214 : 'ouml',
  215 : 'times',
  216 : 'oslash',
  217 : 'ugrave',
  218 : 'uacute',
  219 : 'ucirc',
  220 : 'uuml',
  221 : 'yacute',
  222 : 'thorn',
  223 : 'szlig',
  224 : 'agrave',
  225 : 'aacute',
  226 : 'acirc',
  227 : 'atilde',
  228 : 'auml',
  229 : 'aring',
  230 : 'aelig',
  231 : 'ccedil',
  232 : 'egrave',
  233 : 'eacute',
  234 : 'ecirc',
  235 : 'euml',
  236 : 'igrave',
  237 : 'iacute',
  238 : 'icirc',
  239 : 'iuml',
  240 : 'eth',
  241 : 'ntilde',
  242 : 'ograve',
  243 : 'oacute',
  244 : 'ocirc',
  245 : 'otilde',
  246 : 'ouml',
  247 : 'divide',
  248 : 'oslash',
  249 : 'ugrave',
  250 : 'uacute',
  251 : 'ucirc',
  252 : 'uuml',
  253 : 'yacute',
  254 : 'thorn',
  255 : 'yuml',
  338 : 'oelig',
  339 : 'oelig',
  352 : 'scaron',
  353 : 'scaron',
  376 : 'yuml',
  710 : 'circ',
  732 : 'tilde',
  8194 : 'ensp',
  8195 : 'emsp',
  8201 : 'thinsp',
  8204 : 'zwnj',
  8205 : 'zwj',
  8206 : 'lrm',
  8207 : 'rlm',
  8211 : 'ndash',
  8212 : 'mdash',
  8216 : 'lsquo',
  8217 : 'rsquo',
  8218 : 'sbquo',
  8220 : 'ldquo',
  8221 : 'rdquo',
  8222 : 'bdquo',
  8224 : 'dagger',
  8225 : 'dagger',
  8240 : 'permil',
  8249 : 'lsaquo',
  8250 : 'rsaquo',
  8364 : 'euro',
  402 : 'fnof',
  913 : 'alpha',
  914 : 'beta',
  915 : 'gamma',
  916 : 'delta',
  917 : 'epsilon',
  918 : 'zeta',
  919 : 'eta',
  920 : 'theta',
  921 : 'iota',
  922 : 'kappa',
  923 : 'lambda',
  924 : 'mu',
  925 : 'nu',
  926 : 'xi',
  927 : 'omicron',
  928 : 'pi',
  929 : 'rho',
  931 : 'sigma',
  932 : 'tau',
  933 : 'upsilon',
  934 : 'phi',
  935 : 'chi',
  936 : 'psi',
  937 : 'omega',
  945 : 'alpha',
  946 : 'beta',
  947 : 'gamma',
  948 : 'delta',
  949 : 'epsilon',
  950 : 'zeta',
  951 : 'eta',
  952 : 'theta',
  953 : 'iota',
  954 : 'kappa',
  955 : 'lambda',
  956 : 'mu',
  957 : 'nu',
  958 : 'xi',
  959 : 'omicron',
  960 : 'pi',
  961 : 'rho',
  962 : 'sigmaf',
  963 : 'sigma',
  964 : 'tau',
  965 : 'upsilon',
  966 : 'phi',
  967 : 'chi',
  968 : 'psi',
  969 : 'omega',
  977 : 'thetasym',
  978 : 'upsih',
  982 : 'piv',
  8226 : 'bull',
  8230 : 'hellip',
  8242 : 'prime',
  8243 : 'prime',
  8254 : 'oline',
  8260 : 'frasl',
  8472 : 'weierp',
  8465 : 'image',
  8476 : 'real',
  8482 : 'trade',
  8501 : 'alefsym',
  8592 : 'larr',
  8593 : 'uarr',
  8594 : 'rarr',
  8595 : 'darr',
  8596 : 'harr',
  8629 : 'crarr',
  8656 : 'larr',
  8657 : 'uarr',
  8658 : 'rarr',
  8659 : 'darr',
  8660 : 'harr',
  8704 : 'forall',
  8706 : 'part',
  8707 : 'exist',
  8709 : 'empty',
  8711 : 'nabla',
  8712 : 'isin',
  8713 : 'notin',
  8715 : 'ni',
  8719 : 'prod',
  8721 : 'sum',
  8722 : 'minus',
  8727 : 'lowast',
  8730 : 'radic',
  8733 : 'prop',
  8734 : 'infin',
  8736 : 'ang',
  8743 : 'and',
  8744 : 'or',
  8745 : 'cap',
  8746 : 'cup',
  8747 : 'int',
  8756 : 'there4',
  8764 : 'sim',
  8773 : 'cong',
  8776 : 'asymp',
  8800 : 'ne',
  8801 : 'equiv',
  8804 : 'le',
  8805 : 'ge',
  8834 : 'sub',
  8835 : 'sup',
  8836 : 'nsub',
  8838 : 'sube',
  8839 : 'supe',
  8853 : 'oplus',
  8855 : 'otimes',
  8869 : 'perp',
  8901 : 'sdot',
  8968 : 'lceil',
  8969 : 'rceil',
  8970 : 'lfloor',
  8971 : 'rfloor',
  9001 : 'lang',
  9002 : 'rang',
  9426 : 'copy',
  9674 : 'loz',
  9824 : 'spades',
  9827 : 'clubs',
  9829 : 'hearts',
  9830 : 'diams'
};
function trim(str) {
  if (typeof str != "string") return str;
  str = str.replace(/^\s+|\s+$/g, "");
  return str;
}
function trimAll(str) {
  if (typeof str != "string") return str;
  str = str.replace(/\s+/g, "");
  return str;
}
